/**
 * 用于编辑场景下，处理带脱敏信息的输入项
 * 编辑时未修改则必填但不校验格式（rules='required'）
 * @param originRecord 编辑时的接口查询的表单原始info数据
 * @param fieldRuleList 二维数组，子元素为[字段名, 必填校验格式规则名(mobileRequired或emailRequired)]
 * @param formApi
 */
export function updateSensitiveSchema(
  originRecord: Record<string, any>,
  fieldRuleList: [string, string][],
  formApi: any,
) {
  fieldRuleList.forEach((item) => {
    const requiredRule = /required/i.test(item[1]) ? 'required' : '';
    // 编辑场景下，未对输入框修改时，必填且不校验格式
    formApi.updateSchema([
      {
        componentProps: {
          onChange(e) {
            // 编辑了输入框，如果和原内容不一致则需要校验格式
            formApi.updateSchema([
              {
                fieldName: item[0],
                rules:
                  originRecord[item[0]] === e.target.value
                    ? requiredRule
                    : item[1],
              },
            ]);
          },
        },
        fieldName: item[0],
        rules: requiredRule,
      },
    ]);
  });
}

/**
 * 编辑场景下，处理传给后台的带脱敏信息
 * 如果带星号脱敏格式，则删除不传给后台
 * @param isUpdate 是否为编辑场景
 * @param formValues
 * @param fieldNameList
 */
export function filterSensitiveValues(
  isUpdate: boolean,
  formValues: Record<string, any>,
  fieldNameList: string[],
) {
  if (!isUpdate) return formValues;
  fieldNameList.forEach((fieldName) => {
    if (
      Object.prototype.hasOwnProperty.call(formValues, fieldName) &&
      formValues[fieldName].includes('*')
    ) {
      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
      delete formValues[fieldName];
    }
  });

  return formValues;
}
